1
|
|
View Code Duplication |
( function( $ ) { |
|
|
|
|
2
|
|
|
|
3
|
|
|
function salesforceObjectFields() { |
4
|
|
|
|
5
|
|
|
var delay = ( function() { |
6
|
|
|
var timer = 0; |
7
|
|
|
return function( callback, ms ) { |
8
|
|
|
clearTimeout ( timer ); |
9
|
|
|
timer = setTimeout( callback, ms ); |
10
|
|
|
}; |
11
|
|
|
}() ); |
12
|
|
|
|
13
|
|
|
if ( 0 === $( '.salesforce_record_types_allowed > *' ).length ) { |
14
|
|
|
$( '.salesforce_record_types_allowed' ).hide(); |
15
|
|
|
} |
16
|
|
|
if ( 0 === $( '.salesforce_record_type_default > *' ).length ) { |
17
|
|
|
$( '.salesforce_record_type_default' ).hide(); |
18
|
|
|
} |
19
|
|
|
if ( 0 === $( '.pull_trigger_field > *' ).length ) { |
20
|
|
|
$( '.pull_trigger_field' ).hide(); |
21
|
|
|
} |
22
|
|
|
|
23
|
|
|
$( '#salesforce_object' ).on( 'change', function( el ) { |
|
|
|
|
24
|
|
|
var that = this; |
25
|
|
|
var delayTime = 1000; |
26
|
|
|
delay( function() { |
27
|
|
|
var data = { |
28
|
|
|
'action': 'get_salesforce_object_description', |
29
|
|
|
'include': [ 'fields', 'recordTypeInfos' ], |
30
|
|
|
'field_type': 'datetime', |
31
|
|
|
'salesforce_object': that.value |
32
|
|
|
}; |
33
|
|
|
$.post( ajaxurl, data, function( response ) { |
|
|
|
|
34
|
|
|
|
35
|
|
|
var recordTypesAllowedMarkup = '', |
36
|
|
|
recordTypeDefaultMarkup = '', |
37
|
|
|
dateMarkup = ''; |
38
|
|
|
|
39
|
|
|
if ( 0 < $( response.data.recordTypeInfos ).length ) { |
40
|
|
|
recordTypesAllowedMarkup += '<label for="salesforce_record_types_allowed">Allowed Record Types:</label><div class="checkboxes">'; |
41
|
|
|
$.each( response.data.recordTypeInfos, function( index, value ) { |
42
|
|
|
recordTypesAllowedMarkup += '<label><input type="checkbox" class="form-checkbox" value="' + index + '" name="salesforce_record_types_allowed[' + index + ']" id="salesforce_record_types_allowed-' + index + '"> ' + value + '</label>'; |
43
|
|
|
}); |
44
|
|
|
recordTypesAllowedMarkup += '</div>'; |
45
|
|
|
|
46
|
|
|
|
47
|
|
|
recordTypeDefaultMarkup += '<label for="salesforce_record_type_default">Default Record Type:</label>'; |
48
|
|
|
recordTypeDefaultMarkup += '<select name="salesforce_record_type_default" id="salesforce_record_type_default"><option value="">- Select record type -</option>'; |
49
|
|
|
$.each( response.data.recordTypeInfos, function( index, value ) { |
50
|
|
|
recordTypeDefaultMarkup += '<option value="' + index + '">' + value + '</option>'; |
51
|
|
|
}); |
52
|
|
|
} |
53
|
|
|
|
54
|
|
|
$( '.salesforce_record_types_allowed' ).html( recordTypesAllowedMarkup ); |
55
|
|
|
$( '.salesforce_record_type_default' ).html( recordTypeDefaultMarkup ); |
56
|
|
|
|
57
|
|
|
if ( 0 < $( response.data.fields ).length ) { |
58
|
|
|
dateMarkup += '<label for="pull_trigger_field">Date field to trigger pull:</label>'; |
59
|
|
|
dateMarkup += '<select name="pull_trigger_field" id="pull_trigger_field"><option value="">- Select date field -</option>'; |
60
|
|
|
$.each( response.data.fields, function( index, value ) { |
61
|
|
|
dateMarkup += '<option value="' + value.name + '">' + value.label + '</option>'; |
62
|
|
|
}); |
63
|
|
|
dateMarkup += '</select>'; |
64
|
|
|
dateMarkup += '<p class="description">These are date fields that can cause WordPress to pull an update from Salesforce, according to the <code>salesforce_pull</code> class.</p>'; |
65
|
|
|
} |
66
|
|
|
|
67
|
|
|
$( '.pull_trigger_field' ).html( dateMarkup ); |
68
|
|
|
|
69
|
|
|
if ( '' !== recordTypesAllowedMarkup ) { |
70
|
|
|
$( '.salesforce_record_types_allowed' ).show(); |
71
|
|
|
} else { |
72
|
|
|
$( '.salesforce_record_types_allowed' ).hide(); |
73
|
|
|
} |
74
|
|
|
if ( '' !== recordTypeDefaultMarkup ) { |
75
|
|
|
$( '.salesforce_record_type_default' ).show(); |
76
|
|
|
} else { |
77
|
|
|
$( '.salesforce_record_type_default' ).hide(); |
78
|
|
|
} |
79
|
|
|
|
80
|
|
|
if ( '' !== dateMarkup ) { |
81
|
|
|
$( '.pull_trigger_field' ).show(); |
82
|
|
|
} else { |
83
|
|
|
$( '.pull_trigger_field' ).hide(); |
84
|
|
|
} |
85
|
|
|
}); |
86
|
|
|
}, delayTime ); |
87
|
|
|
}); |
88
|
|
|
} |
89
|
|
|
|
90
|
|
|
function addFieldMappingRow() { |
91
|
|
|
$( '#add-field-mapping' ).click( function() { |
92
|
|
|
var salesforceObject = $( '#salesforce_object' ).val(); |
93
|
|
|
var wordpressObject = $( '#wordpress_object' ).val(); |
94
|
|
|
var rowKey = Math.floor( Date.now() / 1000 ); |
95
|
|
|
$( this ).text( 'Add another field mapping' ); |
96
|
|
|
if ( '' !== wordpressObject && '' !== salesforceObject ) { |
97
|
|
|
fieldmapFields( wordpressObject, salesforceObject, rowKey ); |
98
|
|
|
$( this ).parent().find( '.missing-object' ).remove(); |
99
|
|
|
} else { |
100
|
|
|
$( this ).parent().prepend( '<div class="error missing-object"><span>You have to pick a WordPress object and a Salesforce object to add field mapping.</span></div>' ); |
101
|
|
|
} |
102
|
|
|
return false; |
103
|
|
|
}); |
104
|
|
|
} |
105
|
|
|
|
106
|
|
|
|
107
|
|
|
function fieldmapFields( wordpressObject, salesforceObject, rowKey ) { |
108
|
|
|
var data = { |
109
|
|
|
'action': 'get_wp_sf_object_fields', |
110
|
|
|
'wordpress_object': wordpressObject, |
111
|
|
|
'salesforce_object': salesforceObject |
112
|
|
|
}; |
113
|
|
|
$.post( ajaxurl, data, function( response ) { |
|
|
|
|
114
|
|
|
|
115
|
|
|
var wordpress = ''; |
116
|
|
|
var salesforce = ''; |
117
|
|
|
var markup = ''; |
118
|
|
|
|
119
|
|
|
wordpress += '<select name="wordpress_field[' + rowKey + ']" id="wordpress_field-' + rowKey + '">'; |
120
|
|
|
wordpress += '<option value="">- Select WordPress field -</option>'; |
121
|
|
|
$.each( response.data.wordpress, function( index, value ) { |
122
|
|
|
wordpress += '<option value="' + value.key + '">' + value.key + '</option>'; |
123
|
|
|
}); |
124
|
|
|
wordpress += '</select>'; |
125
|
|
|
|
126
|
|
|
salesforce += '<select name="salesforce_field[' + rowKey + ']" id="salesforce_field-' + rowKey + '">'; |
127
|
|
|
salesforce += '<option value="">- Select Salesforce field -</option>'; |
128
|
|
|
$.each( response.data.salesforce, function( index, value ) { |
129
|
|
|
salesforce += '<option value="' + value.name + '">' + value.label + '</option>'; |
130
|
|
|
}); |
131
|
|
|
salesforce += '</select>'; |
132
|
|
|
|
133
|
|
|
markup = '<tr><td class="column-wordpress_field">' + wordpress + '</td><td class="column-salesforce_field">' + salesforce + '</td><td class="column-is_prematch"><input type="checkbox" name="is_prematch[' + rowKey + ']" id="is_prematch-' + rowKey + '" value="1" /><td class="column-is_key"><input type="checkbox" name="is_key[' + rowKey + ']" id="is_key-' + rowKey + '" value="1" /></td><td class="column-direction"><div class="radios"><label><input type="radio" value="sf_wp" name="direction[' + rowKey + ']" id="direction-' + rowKey + '-sf-wp"> Salesforce to WordPress</label><label><input type="radio" value="wp_sf" name="direction[' + rowKey + ']" id="direction-' + rowKey + '-wp-sf"> WordPress to Salesforce</label><label><input type="radio" value="sync" name="direction[' + rowKey + ']" id="direction-' + rowKey + '-sync" checked> Sync</label></div></td><td class="column-is_delete"><input type="checkbox" name="is_delete[' + rowKey + ']" id="is_delete-' + rowKey + '" value="1" /></td></tr>'; |
134
|
|
|
$( 'table.fields tbody' ).append( markup ); |
135
|
|
|
|
136
|
|
|
}); |
137
|
|
|
} |
138
|
|
|
|
139
|
|
|
function pushAndPullObjects() { |
140
|
|
|
$( '.salesforce_user_ajax_message' ).hide(); |
141
|
|
|
if ( 0 < $( '#wordpress_object_ajax' ).length ) { |
142
|
|
|
$( '.push_to_salesforce_button' ).on( 'click', function() { |
143
|
|
|
var wordpressObject = $( '#wordpress_object_ajax' ).val(); |
144
|
|
|
var wordpressId = $( '#wordpress_id_ajax' ).val(); |
145
|
|
|
var data = { |
146
|
|
|
'action': 'push_to_salesforce', |
147
|
|
|
'wordpress_object': wordpressObject, |
148
|
|
|
'wordpress_id': wordpressId |
149
|
|
|
}; |
150
|
|
|
$.post( ajaxurl, data, function( response ) { |
|
|
|
|
151
|
|
|
if ( true === response.success ) { |
152
|
|
|
updateSalesforceUserSummary(); |
153
|
|
|
$( '.salesforce_user_ajax_message' ).width( $( '.mapped-salesforce-user' ).width() - 27 ); |
154
|
|
|
$( '.salesforce_user_ajax_message' ).html( '<p>This object has been pushed to Salesforce.</p>' ).fadeIn().delay( 4000 ).fadeOut(); |
155
|
|
|
} |
156
|
|
|
}); |
157
|
|
|
return false; |
158
|
|
|
}); |
159
|
|
|
} |
160
|
|
|
$( '.pull_from_salesforce_button' ).on( 'click', function() { |
161
|
|
|
var salesforceId = $( '#salesforce_id_ajax' ).val(); |
162
|
|
|
var wordpressObject = $( '#wordpress_object_ajax' ).val(); |
163
|
|
|
var data = { |
164
|
|
|
'action': 'pull_from_salesforce', |
165
|
|
|
'salesforce_id': salesforceId, |
166
|
|
|
'wordpress_object': wordpressObject |
167
|
|
|
}; |
168
|
|
|
$.post( ajaxurl, data, function( response ) { |
|
|
|
|
169
|
|
|
if ( true === response.success ) { |
170
|
|
|
updateSalesforceUserSummary(); |
171
|
|
|
$( '.salesforce_user_ajax_message' ).width( $( '.mapped-salesforce-user' ).width() - 27 ); |
172
|
|
|
$( '.salesforce_user_ajax_message' ).html( '<p>This object has been pulled from Salesforce.</p>' ).fadeIn().delay( 4000 ).fadeOut(); |
173
|
|
|
} |
174
|
|
|
}); |
175
|
|
|
return false; |
176
|
|
|
}); |
177
|
|
|
} |
178
|
|
|
|
179
|
|
|
function updateSalesforceUserSummary() { |
180
|
|
|
var mappingId = $( '#mapping_id_ajax' ).val(); |
181
|
|
|
var data = { |
182
|
|
|
'action': 'refresh_mapped_data', |
183
|
|
|
'mapping_id': mappingId |
184
|
|
|
}; |
185
|
|
|
$.post( ajaxurl, data, function( response ) { |
|
|
|
|
186
|
|
|
if ( true === response.success ) { |
187
|
|
|
$( 'td.last_sync_message' ).text( response.data.last_sync_message ); |
188
|
|
|
$( 'td.last_sync_action' ).text( response.data.last_sync_action ); |
189
|
|
|
$( 'td.last_sync_status' ).text( response.data.last_sync_status ); |
190
|
|
|
$( 'td.last_sync' ).text( response.data.last_sync ); |
191
|
|
|
if ( '1' === response.data.last_sync_status ) { |
192
|
|
|
$( 'td.last_sync_status' ).text( 'success' ); |
193
|
|
|
} |
194
|
|
|
} |
195
|
|
|
}); |
196
|
|
|
} |
197
|
|
|
|
198
|
|
|
function clearSfwpCacheLink() { |
199
|
|
|
$( '#clear-sfwp-cache' ).click( function() { |
200
|
|
|
var data = { |
201
|
|
|
'action': 'clear_sfwp_cache' |
202
|
|
|
}; |
203
|
|
|
var that = $( this ); |
204
|
|
|
$.post( ajaxurl, data, function( response ) { |
|
|
|
|
205
|
|
|
if ( true === response.success && true === response.data.success ) { |
206
|
|
|
that.parent().html( response.data.message ).fadeIn(); |
207
|
|
|
} |
208
|
|
|
}); |
209
|
|
|
return false; |
210
|
|
|
}); |
211
|
|
|
} |
212
|
|
|
|
213
|
|
|
// as the drupal plugin does, we only allow one field to be a prematch or key |
214
|
|
|
$( document ).on( 'click', '.column-is_prematch input', function() { |
215
|
|
|
$( '.column-is_prematch input' ).not( this ).prop( 'checked', false ); |
216
|
|
|
}); |
217
|
|
|
|
218
|
|
|
$( document ).on( 'click', '.column-is_key input', function() { |
219
|
|
|
$( '.column-is_key input' ).not( this ).prop( 'checked', false ); |
220
|
|
|
}); |
221
|
|
|
|
222
|
|
|
$( document ).ready( function() { |
223
|
|
|
|
224
|
|
|
var timeout; |
225
|
|
|
$( '#wordpress_object, #salesforce_object' ).on( 'change', function() { |
226
|
|
|
clearTimeout( timeout ); |
227
|
|
|
timeout = setTimeout( function() { |
228
|
|
|
$( 'table.fields tbody tr' ).fadeOut(); |
229
|
|
|
$( 'table.fields tbody tr' ).remove(); |
230
|
|
|
}, 1000 ); |
231
|
|
|
}); |
232
|
|
|
|
233
|
|
|
// todo: need to fix this so it doesn't run all the spinners at the same time when there are multiples on the same page |
234
|
|
|
$( document ).ajaxStart( function() { |
235
|
|
|
$( '.spinner' ).addClass( 'is-active' ); |
236
|
|
|
}).ajaxStop( function() { |
237
|
|
|
$( '.spinner' ).removeClass( 'is-active' ); |
238
|
|
|
}); |
239
|
|
|
salesforceObjectFields(); |
240
|
|
|
addFieldMappingRow(); |
241
|
|
|
pushAndPullObjects(); |
242
|
|
|
clearSfwpCacheLink(); |
243
|
|
|
}); |
244
|
|
|
|
245
|
|
|
}( jQuery ) ); |
246
|
|
|
|